# -*- coding=utf-8-*-
"""
@File:memory_selection
@Author:Created by Han X.Y
@Date:on 2021/8/4 16:27 
"""

"""
矩阵的压缩矩阵
两类问题：
第一类：特殊矩阵的压缩存储
第二类：系数矩阵的压缩存储(三元组的存储结构、十字链表的存储结构)
"""

"""
第一类特殊矩阵：
值相同元素或零元素分布有一定规律的矩阵称为特殊矩阵
例如：对称矩阵、上下三角、带状矩阵等
"""

"""
对称矩阵可以只存储三角部分，共需n(n+1)/2个单元：

以一维数组sa[]作为n阶对称矩阵A的存储结构，A中任意元素aij与它的存储位置sa[k]
之间存在着如下对应关系：
if i>=j:
    k=i(i+1)/2+j
else:
    #i<j
    k=(j+1)j/2+i
"""


def mat_convertto_list():
    mat=[[1,2,3],[2,1,0],[3,0,1]]
    List=[0]*(len(mat)*(len(mat[0])+1)//2)
    for i in range(len(mat)):
        for j in range(len(mat[0])):
            k=i*(i+1)/2+j if i>=j else (j+1)*j/2+i
            print(k,end=" ")
    print(List)

if __name__=="__main__":
    mat_convertto_list()